package cn.vehicle.mapper;

import cn.vehicle.domains.bo.QueryCommonVehicleBo;
import cn.vehicle.domains.entity.CommonVehicleEntity;
import java.util.List;
import java.util.Map;

/**
 * 普通车辆信息Mapper接口
 * 处理车辆信息的新增、查询、更新、删除等操作
 */
public interface CommonVehicleMapper {

    /**
     * 新增车辆信息
     * @param vehicleEntity 车辆实体（包含车牌号、类型等核心信息）
     * @return 影响行数（1：成功，0：失败）
     */
    int insertVehicle(CommonVehicleEntity vehicleEntity);

    /**
     * 根据ID查询车辆详情
     * @param id 车辆ID
     * @return 车辆实体（无数据则返回null）
     */
    CommonVehicleEntity selectVehicleById(Long id);

    /**
     * 根据车牌号查询车辆（用于车牌号唯一性校验）
     * @param vehicleNumber 车牌号（如：京A12345）
     * @return 车辆实体（无数据则返回null）
     */
    CommonVehicleEntity selectVehicleByNumber(String vehicleNumber);

    /**
     * 根据VIN码查询车辆（用于VIN码唯一性校验）
     * @param vin 车辆识别代号（17位VIN码）
     * @return 车辆实体（无数据则返回null）
     */
    CommonVehicleEntity selectVehicleByVin(String vin);

    /**
     * 条件查询车辆列表
     * @param queryCommonVehicleBo 查询条件（非空字段作为筛选条件）
     * @return 符合条件的车辆列表（无数据则返回空列表）
     */
    List<CommonVehicleEntity> selectVehicleList(QueryCommonVehicleBo queryCommonVehicleBo);

    /**
     * 选择性更新车辆信息（仅更新非空字段）
     * @param vehicleEntity 车辆实体（需包含id，其他字段非空则更新）
     * @return 影响行数（1：成功，0：失败或无变更）
     */
    int updateVehicleSelective(CommonVehicleEntity vehicleEntity);

    /**
     * 根据ID删除车辆信息
     * @param id 车辆ID
     * @return 影响行数（1：成功，0：失败）
     */
    int deleteVehicleById(Long id);

    /**
     * 批量删除车辆信息（根据ID列表）
     * @param ids 车辆ID列表
     * @return 影响行数（成功删除的车辆数量）
     */
    int batchDeleteVehicles(List<Long> ids);

    /**
     * 批量更新车辆启用状态
     * @param paramMap 包含两个参数：ids（车辆ID列表）、enabled（目标状态：true-启用，false-禁用）
     * @return 影响行数（成功更新状态的车辆数量）
     */
    int batchUpdateVehicleEnabled(Map<String, Object> paramMap);

    /**
     * 根据关联id查询
     */
    CommonVehicleEntity selectCommonVehicleByAssociationId(Long id);
}